package main

import (
	"fmt"
	"io"
	"log"
	"net"
	"reflect"
)

func main() {
	addr := "www.baidu.com:80" //定义主机名
	conn, err := net.Dial("tcp", addr)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("访问公网IP地址是：", conn.RemoteAddr().String())
	fmt.Printf("客户端链接的地址及端口是：%v\n", conn.LocalAddr()) //获取到本地的访问地址和端口。
	fmt.Println("“conn.LocalAddr()”所对应的数据类型是：", reflect.TypeOf(conn.LocalAddr()))
	fmt.Println("“conn.RemoteAddr().String()”所对应的数据类型是：", reflect.TypeOf(conn.RemoteAddr().String()))

	n, err := conn.Write([]byte("GET / HTTP/1.1\r\n\r\n")) //向服务端发送数据。用n接受返回的数据大小，用err接受错误信息。
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("向服务端发送的数据大小是:", n)

	buf := make([]byte, 1024)
	for {
		n, err = conn.Read(buf)
		if err == io.EOF {
			conn.Close()
			break
		}
		fmt.Print(string(buf[:n])) //将接受的内容都读取出来。
	}

	fmt.Println("读取完毕...............")

}
